﻿using System;
using System.Data.SqlClient;
using DAOFactory;
using System.Collections.Generic;
using Business_Entity;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
namespace DAOFactory
{
    /// <summary>
    /// Description of DAOPedidoCompra.
    /// </summary>
    public class DAOPedidoCompra
    {
        public DAOPedidoCompra()
        {
        }
        public static List<BEPedidoCompra> getDBListaPedidoCompra(int id,String tipo,String feca,String fecb,String fecc,String fecd,String fece,String fecf)
        {
            List<BEPedidoCompra> lista = new List<BEPedidoCompra>();
			int cont=0;
            String sql = "select A.idPedidoCompra,A.CantRecepcionada,A.CantRecibida,A.CantSolicitada,"+
			"A.strFechaAtencion,A.strFechaEntrega,A.strFechaSolicitud,B.Descripcion,A.Estado_PC "+
			"from PEDIDOCOMPRA A,ESTADOPEDIDOCOMPRA B WHERE A.Estado_PC=B.idEstado"+ 
			" AND A.EstadoV='A' ";
            if (id>0){sql+="  AND A.idPedidoCompra="+id;}
            if (feca.CompareTo("")!=0){
            	sql+=  " and '"+feca+"'<=A.strFechaSolicitud and '"+"00000000'<=A.strFechaSolicitud";
            }
            if (fecb.CompareTo("")!=0){
            	sql+=  " and '"+fecb+"'>=A.strFechaSolicitud and '"+"99999999'>=A.strFechaSolicitud";
            }
            if (fecc.CompareTo("")!=0){
            	sql+=  " and '"+fecc+"'<=A.strFechaAtencion and '"+"00000000'<=A.strFechaAtencion";
            }
            if (fecd.CompareTo("")!=0){
            	sql+=  " and '"+fecd+"'>=A.strFechaAtencion and '"+"99999999'>=A.strFechaAtencion";
            }
            if (fece.CompareTo("")!=0){
            	sql+=  " and '"+fece+"'<=A.strFechaEntrega and '"+"00000000'<=A.strFechaEntrega";
            }
            if (fecf.CompareTo("")!=0){
            	sql+=  " and '"+fecf+"'>=A.strFechaEntrega and '"+"99999999'>=A.strFechaEntrega";
            }
            if (tipo.CompareTo("TODOS")!=0){
            	sql+=  "and B.Descripcion='"+tipo+"'";
            }
            sql+=" order by 1";
            SqlCommand cmd = new SqlCommand(sql, ConnectionManager.getConnection());

            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
            	BEPedidoCompra bepc=new BEPedidoCompra();
            	bepc.Id = reader.GetInt32(0);
            	bepc.CantidadTotalRecepcionada=reader.GetInt32(1);
            	bepc.CantidadTotalRecibida=reader.GetInt32(2);
            	bepc.CantidadTotalSolicitada=reader.GetInt32(3);
            	bepc.fechaAtencion=reader[4].ToString();
            	bepc.fechaEntrega=reader[5].ToString();
            	bepc.fechaSolicitud=reader[6].ToString();
            	bepc.strEstado=reader[7].ToString();
            	bepc.Estado=reader.GetInt32(8);
            	lista.Add(bepc);
            }
            reader.Close();

            return lista;
        }

        public static List<BELineaPedidoCompra> getDBListaLineaPedidoCompra(int idPedidoCompra)
        {
        	List<BELineaPedidoCompra> lstLineaPedidoCompra=new List<BELineaPedidoCompra>();
            String cmdStr = "select pcl.idPedidoCompraLinea,prod.Nombre,tp.Descripcion,prod.Descripcion,"+
			"prov.RazonSocial,pcl.cantSolicitada,pcl.cantRecepcionada,pcl.cantRecibida,prod.idProducto "+
			"FROM PEDIDOCOMPRALINEA pcl,PRODUCTO prod,PROVEEDOR prov,TIPOPRODUCTO tp "+
			"WHERE tp.idTipoProducto=prod.idTipoProducto and prod.idProducto=pcl.idProducto"+
			" and prov.idProveedor=pcl.idProveedorSeleccionado and pcl.idEstado='A' "+
			"and pcl.idPedidoCompra="+idPedidoCompra;
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());

            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
            	BELineaPedidoCompra bel=new BELineaPedidoCompra();
            	bel.Id=reader.GetInt32(0);
            	bel.ProductoProveedor.Producto.Nombre=reader.GetString(1);
            	bel.ProductoProveedor.Producto.TipoProducto.Descripcion=reader.GetString(2);
            	bel.ProductoProveedor.Producto.Descripcion=reader.GetString(3);
            	bel.Proveedor.RazonSocial=reader.GetString(4);
            	bel.CantidadSolicitada=reader.GetInt32(5);
            	bel.CantidadRecepcionada=reader.GetInt32(6);
            	bel.CantidadRecibida=reader.GetInt32(7);
            	bel.ProductoProveedor.Producto.Codigo=reader.GetInt32(8);
                lstLineaPedidoCompra.Add(bel);
            }
            reader.Close();

            return lstLineaPedidoCompra;
        }

        public static void DeleteDBPedidoCompra(int idPedidoCompra)
        {
            SqlCommand cmd = new SqlCommand("COMPRA_ELIMINAR_PEDIDO_COMPRA_M", ConnectionManager.getConnection());
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@Codigo", SqlDbType.Int);
            cmd.Parameters["@Codigo"].Value = idPedidoCompra;
            cmd.ExecuteNonQuery();
            //ConnectionManager.closeConnection();
        }
        public static void UpdateDBPedidoCompra(BEPedidoCompra bePC)
        {
            SqlCommand cmd = new SqlCommand("COMPRA_ACTUALIZAR_PEDIDO_COMPRA_M", ConnectionManager.getConnection());
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@Codigo", SqlDbType.Int);
            cmd.Parameters["@Codigo"].Value = bePC.Id;
            cmd.Parameters.Add("@CantSol", SqlDbType.Int);
            cmd.Parameters["@CantSol"].Value = bePC.CantidadTotalSolicitada;
            cmd.Parameters.Add("@CantRec", SqlDbType.Int);
            cmd.Parameters["@CantRec"].Value = bePC.CantidadTotalRecibida;
            cmd.Parameters.Add("@CantRecp", SqlDbType.Int);
            cmd.Parameters["@CantRecp"].Value = bePC.CantidadTotalRecepcionada;
            cmd.Parameters.Add("@EstadoPC", SqlDbType.Int);
            cmd.Parameters["@EstadoPC"].Value = bePC.Estado;
            cmd.Parameters.Add("@strFecSol", SqlDbType.VarChar);
            cmd.Parameters["@strFecSol"].Value = bePC.fechaSolicitud;
            cmd.Parameters.Add("@strFecAte", SqlDbType.VarChar);
            cmd.Parameters["@strFecAte"].Value = bePC.fechaAtencion;
            cmd.Parameters.Add("@strFecEnt", SqlDbType.VarChar);
            cmd.Parameters["@strFecEnt"].Value = bePC.fechaEntrega;
            cmd.ExecuteNonQuery();
            //ConnectionManager.closeConnection();


        }
        public static int AddDBPedidoCompra(BEPedidoCompra bePC)
        {
            SqlCommand cmd = new SqlCommand("COMPRA_AGREGAR_PEDIDO_COMPRA_M", ConnectionManager.getConnection());
            cmd.CommandType = CommandType.StoredProcedure;

            
            cmd.Parameters.Add("@CantSol", SqlDbType.Int);
            cmd.Parameters["@CantSol"].Value = bePC.CantidadTotalSolicitada;
            cmd.Parameters.Add("@CantRec", SqlDbType.Int);
            cmd.Parameters["@CantRec"].Value = bePC.CantidadTotalRecibida;
            cmd.Parameters.Add("@CantRecp", SqlDbType.Int);
            cmd.Parameters["@CantRecp"].Value = bePC.CantidadTotalRecepcionada;
            cmd.Parameters.Add("@EstadoPC", SqlDbType.Int);
            cmd.Parameters["@EstadoPC"].Value = bePC.Estado;
            cmd.Parameters.Add("@strFecSol", SqlDbType.VarChar,10);
            cmd.Parameters["@strFecSol"].Value = bePC.fechaSolicitud;
            cmd.Parameters.Add("@strFecAte", SqlDbType.VarChar,10);
            cmd.Parameters["@strFecAte"].Value = bePC.fechaAtencion;
            cmd.Parameters.Add("@strFecEnt", SqlDbType.VarChar,10);
            cmd.Parameters["@strFecEnt"].Value = bePC.fechaEntrega;
            cmd.Parameters.Add("@CodigoGenerado",SqlDbType.Int);
            cmd.Parameters["@CodigoGenerado"].Direction = ParameterDirection.Output;
            int cod=0;
            cmd.ExecuteNonQuery();
            cod = (int) cmd.Parameters["@CodigoGenerado"].Value;
            //ConnectionManager.closeConnection();
            return cod;

        }
        public static void AddBDLineaPedidoCompra(BELineaPedidoCompra beLPC, int idLPC)
        {
        	try{
	        	SqlCommand cmd = new SqlCommand("COMPRA_AGREGAR_LINEA_PEDIDO_COMPRA_M", ConnectionManager.getConnection());
	            cmd.CommandType = CommandType.StoredProcedure;
	
	            cmd.Parameters.Add("@Codigo", SqlDbType.Int);
	            cmd.Parameters["@Codigo"].Value = idLPC;
	            cmd.Parameters.Add("@IdProducto", SqlDbType.Int);
	            cmd.Parameters["@IdProducto"].Value = beLPC.ProductoProveedor.Producto.Codigo;
	            cmd.Parameters.Add("@CantidadSol", SqlDbType.Int);
	            cmd.Parameters["@CantidadSol"].Value = beLPC.CantidadSolicitada;
	            cmd.Parameters.Add("@CantidadRec", SqlDbType.Int);
	            cmd.Parameters["@CantidadRec"].Value = beLPC.CantidadRecibida;
	            cmd.Parameters.Add("@CantidadRecp", SqlDbType.Int);
	            cmd.Parameters["@CantidadRecp"].Value = beLPC.CantidadRecepcionada;
	            cmd.Parameters.Add("@ProveedorSelec", SqlDbType.VarChar);
	            cmd.Parameters["@ProveedorSelec"].Value = beLPC.Proveedor.RazonSocial;
	
	            cmd.ExecuteNonQuery();
        	}
        	catch(SqlException ex){
        		MessageBox.Show(ex.Message,"Titulo");
        	}
            //ConnectionManager.closeConnection();
        }
        public static void DeleteDBLineaPedidoCompra(int id)
        {
            SqlCommand cmd = new SqlCommand("COMPRA_ELIMINAR_LINEA_PEDIDO_COMPRA_M", ConnectionManager.getConnection());
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@Codigo", SqlDbType.Int);
            cmd.Parameters["@Codigo"].Value = id;
            cmd.ExecuteNonQuery();
            //ConnectionManager.closeConnection();

        }
        public static void UpdateDBLineaPedidoCompra(BELineaPedidoCompra bel){
        	SqlCommand cmd= new SqlCommand("COMPRA_ACTUALIZA_LINEA_PEDIDO_COMPRA_M",ConnectionManager.getConnection());
        	cmd.CommandType= CommandType.StoredProcedure;
        	cmd.Parameters.Add("@Cod", SqlDbType.Int);
            cmd.Parameters["@Cod"].Value = bel.Id;
            cmd.Parameters.Add("@Proveedor",SqlDbType.VarChar,30);
            cmd.Parameters["@Proveedor"].Value = bel.Proveedor.RazonSocial;
            cmd.Parameters.Add("@CantSol",SqlDbType.VarChar);
            cmd.Parameters["@CantSol"].Value = bel.CantidadSolicitada;
            cmd.Parameters.Add("@CantRecep",SqlDbType.VarChar);
            cmd.Parameters["@CantRecep"].Value = bel.CantidadRecepcionada;
            cmd.Parameters.Add("@CantRec",SqlDbType.VarChar);
            cmd.Parameters["@CantRec"].Value = bel.CantidadRecibida;
            cmd.ExecuteNonQuery();
            //ConnectionManager.closeConnection();
        }
        
        public static BEPedidoCompra getPedidoCompra(int id)
        {
        	BEPedidoCompra bePC=new BEPedidoCompra();
        	List<BEPedidoCompra> lstPC=getDBListaPedidoCompra(id,"TODOS","","","","","","");
        	return lstPC[0];
        }
        public static List<BEPedidoCompra> getpedidosCompra(int cod, String fecI, String fecF, String Prov)
        {
            return null;
        }
        public static List<String> getEstadosPedidosCompra(){
        	List<String> lista=new List<string>();
        	String sql="select Descripcion from ESTADOPEDIDOCOMPRA";
        	SqlCommand cmd = new SqlCommand(sql, ConnectionManager.getConnection());
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
            	String cad=reader.GetString(0);
                lista.Add(cad);
            }
            reader.Close();
            return lista;
        }
    }
}